package com.ffcc.fitness.gym.mapper;

import com.ffcc.fitness.gym.pojo.entity.Gym;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface GymMapper {
    /**
     * 插入新场馆记录
     */
    int insert(Gym gym);
    
    /**
     * 根据用户名查询场馆信息
     */
    Gym selectByUsername(@Param("username") String username);
    
    /**
     * 根据用户ID查询场馆信息
     */
    Gym selectByUserId(@Param("userId") Long userId);
    
    /**
     * 根据用户ID查询已认领的场馆信息
     */
    Gym selectClaimedByUserId(@Param("userId") Long userId);
    
    /**
     * 更新场馆信息
     */
    int update(Gym gym);
    
    /**
     * 根据场馆ID查询场馆信息 (仅内部使用)
     */
    Gym selectById(@Param("gymId") Long gymId);
    
    /**
     * 查询所有活跃状态的场馆
     */
    List<Gym> selectActiveGyms();
    
    /**
     * 根据区域查询场馆
     */
    List<Gym> selectByArea(@Param("area") String area);
    
    /**
     * 批量插入POI场馆数据
     */
    int batchInsertPOI(@Param("gyms") List<Gym> gyms);
    
    /**
     * 根据POI ID查询场馆
     */
    Gym selectByPoiId(@Param("poiId") String poiId);
    
    /**
     * 查询未认领的POI场馆
     */
    List<Gym> selectUnclaimedPOIGyms();
    
    /**
     * 查询所有POI场馆（包括已认领和未认领）
     */
    List<Gym> selectAllPOIGyms();
    
    /**
     * 根据坐标范围查询附近场馆
     */
    List<Gym> selectNearbyGyms(@Param("minLng") Double minLng, 
                              @Param("maxLng") Double maxLng,
                              @Param("minLat") Double minLat, 
                              @Param("maxLat") Double maxLat);
    
    /**
     * 根据场馆ID获取场馆管理员ID
     */
    Long getGymAdminId(@Param("gymId") Long gymId);
    
    /**
     * 根据场馆ID获取场馆名称
     */
    String getGymNameById(@Param("gymId") Long gymId);
}
